package cn.b.sky.message.dao;

import cn.b.sky.message.model.InstantMessageInfo;
import cn.b.sky.message.model.MessageConfigInfo;
import cn.b.sky.message.model.MessageContentInfo;
import cn.b.sky.message.model.MessageReceiverInfo;
import cn.b.sky.message.model.condition.InstantMessageCondition;
import cn.b.sky.message.model.condition.MessageConfigCondition;
import cn.b.sky.user.service.model.UserInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface MessageDao {

  /**
   * 
   * <strong>Title : selectMessageConfigList<br></strong>
   * <strong>Description : </strong>查询消息配置列表<br> 
   * <strong>Create on : 2015-9-16 上午10:30:24<br></strong>
   * <p>
   * @param messageConfigCondition
   * @return
   * List<MessageConfigInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<MessageConfigInfo> selectMessageConfigList(MessageConfigCondition messageConfigCondition);

  /**
   * 
   * <strong>Title : selectMessageConfigCount<br></strong>
   * <strong>Description : </strong>查询消息配置数量<br> 
   * <strong>Create on : 2015-9-16 上午10:30:48<br></strong>
   * <p>
   * @param messageConfigCondition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectMessageConfigCount(MessageConfigCondition messageConfigCondition);

  /**
   * 查询接收人
   * @param messageConfigInfo
   * @return
   */
  List<MessageReceiverInfo> selectMessageReceiver(@Param("siteCode") String siteCode,
                                                  @Param("messageCode") String messageCode);

  /**
   * 新增消息配置
   * @param messageConfigInfo
   */
  void insertMessageConfig(MessageConfigInfo messageConfigInfo);

  /**
   * 更新消息配置
   * @param messageConfigInfo
   */
  void updateMessageConfig(MessageConfigInfo messageConfigInfo);

  /**
   * 删除消息配置
   * @param messageConfigInfo
   */
  void deleteMessageConfig(@Param("siteCode") String siteCode, @Param("messageCode") String messageCode);

  /**
   * 新增消息内容
   * @param messageConfigInfo
   */
  void insertMessageContent(MessageContentInfo messageContentInfo);

  /**
   * 删除消息内容
   * @param messageConfigInfo
   */
  void deleteMessageContent(@Param("siteCode") String siteCode, @Param("messageCode") String messageCode);

  /**
   * 新增消息接收者
   * @param messageConfigInfo
   */
  void insertMessageReceiver(MessageReceiverInfo messageReceiverInfo);

  /**
   * 删除消息接收者
   * @param messageConfigInfo
   */
  void deleteMessageReceiver(@Param("siteCode") String siteCode, @Param("messageCode") String messageCode);

  /**
   * 根据消息配置编号查询消息配置信息
   * @param messageCode
   * @return
   */
  MessageConfigInfo selectMessageConfig(@Param("siteCode") String siteCode, @Param("messageCode") String messageCode);

  /**
   * 根据组织代码获得用户
   * @param organizationCode
   * @return
   */
  List<UserInfo> selectUsersByOrganization(String organizationCode);

  /**
   * 查询消息内容
   * @param messageContentInfo
   * @return
   */
  List<MessageContentInfo> selectMessageContent(MessageContentInfo messageContentInfo);

  /**
   * 新增即时消息
   * @param instantMessageInfo
   */
  void insertInstantMessage(InstantMessageInfo instantMessageInfo);

  /**
   * 查询是否有未读消息
   * @param userCode
   * @return
   */
  int selectUnReadMessageCount(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 标记消息为已读
   * @param messageId
   */
  void doMarkAsRead(long messageId);

  /**
   * 
   * <strong>Title : selectHisInstantMessageList<br></strong>
   * <strong>Description : 查询历史消息列表<br> 
   * <strong>Create on : 2015-9-15 下午04:29:43<br></strong>
   * <p>
   * @param instantMessageCondition
   * @return
   * List<InstantMessageInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<InstantMessageInfo> selectHisInstantMessageList(InstantMessageCondition instantMessageCondition);

  /**
   * 
   * @Title: selectAllLanguage
   *
   * @Description:  查询全部系统语言
   * @return List<MessageContentInfo> 
   * @throws
   * @author zhaoxin
   * @date   2012-10-29 上午09:59:14
   */
  List<MessageContentInfo> selectAllLanguage();

  /**
   * 
   * @Title: selectContentListByMessageCode
   *
   * @Description: 根据消息代码查询全部语言内容
   * @param messageCode
   * @return List<MessageContentInfo> 
   * @throws
   * @author zhaoxin
   * @date   2012-10-30 下午01:48:49
   */
  List<MessageContentInfo> selectContentListByMessageCode(@Param("siteCode") String siteCode,
                                                          @Param("messageCode") String messageCode);

  /**
   * 
   * <strong>Title : selectUnReadMeaage<br></strong>
   * <strong>Description : </strong>查询未读消息<br> 
   * <strong>Create on : 2015-9-14 下午01:44:29<br></strong>
   * <p>
   * @return
   * List<InstantMessageInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<InstantMessageInfo> selectUnReadMeaage(InstantMessageCondition instantMessageCondition);

  /**
   * 
   * <strong>Title : selectInstantMessageById<br></strong>
   * <strong>Description : </strong>根据ID查询即时消息<br> 
   * <strong>Create on : 2015-9-15 下午01:56:52<br></strong>
   * <p>
   * @param id
   * @return
   * InstantMessageInfo
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  InstantMessageInfo selectInstantMessageById(long id);

  /**
   * 
   * <strong>Title : selectHisInstantMessageCount<br></strong>
   * <strong>Description : </strong>查询历史消息数量<br> 
   * <strong>Create on : 2015-9-15 下午04:29:35<br></strong>
   * <p>
   * @param instantMessageCondition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int selectHisInstantMessageCount(InstantMessageCondition instantMessageCondition);
}
